package cn.joeg.dp.singleton.lazy;

/**
 * Created by CQ on 2018/3/7.
 */

//懒汉式单例类，在第一次调用的时候实例化
public class LazySingleton2 {

    //1.第一步将构造方法私有化
    private LazySingleton2() {

    }

    //2.然后声明一个静态变量保存单例的引用
    private static LazySingleton2 lazy = null;

    //3.通过提供一个静态的方法来获得单例的引用
    //为了保证多线程环境下正确的访问，给方法加上同步锁 synchronized
    //慎用 synchronized   关键字，阻塞，性能非常低下
    //加上 synchronized 后对于 getInstance方法来说，始终是单线程访问
    //没有充分利用计算机资源
    public static synchronized LazySingleton2 getInstance() {
        if (lazy == null) {
            LazySingleton2 s = new LazySingleton2();
            System.out.println(System.currentTimeMillis() + "," + lazy);
            System.out.println(s);
            lazy = s;
        }
        return lazy;
    }

    public void sayHello() {
        System.out.println("Hello!" + this.hashCode());
    }


}
